package io.yuncheng.modules.sys.service.impl;

import io.yuncheng.common.config.DictConfig;
import io.yuncheng.common.utils.Constant;
import io.yuncheng.common.utils.SysDictConstant;
import io.yuncheng.modules.sys.entity.SubAppTypeConfigVO;
import io.yuncheng.modules.sys.entity.SysDeptEntity;
import io.yuncheng.modules.sys.entity.SysDictEntity;
import io.yuncheng.modules.sys.service.SysDeptService;
import io.yuncheng.modules.sys.dao.SubAppTypeConfigDao;
import io.yuncheng.modules.sys.entity.SubAppTypeConfigEntity;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import io.yuncheng.common.utils.PageUtils;
import io.yuncheng.common.utils.Query;

import io.yuncheng.modules.sys.service.SubAppTypeConfigService;

import javax.annotation.Resource;


@Service("subAppTypeConfigService")
public class SubAppTypeConfigServiceImpl extends ServiceImpl<SubAppTypeConfigDao, SubAppTypeConfigEntity> implements SubAppTypeConfigService {

    @Resource
    private SysDeptService sysDeptService;
    @Resource
    private DictConfig config;
    @Override
    public PageUtils queryPage(Map<String, Object> params) {
        Object parentDeptId = params.get("parentDeptId");
        Object status = params.get("status");
        IPage<SubAppTypeConfigEntity> page = this.page(
                new Query<SubAppTypeConfigEntity>().getPage(params),
                new QueryWrapper<SubAppTypeConfigEntity>()
                        .eq(parentDeptId!=null,"parent_dept_id",parentDeptId)
                        .eq(status!=null,"status",status)
        );
        List<SubAppTypeConfigEntity> records = page.getRecords();
        List<SubAppTypeConfigVO> collect = records.stream().map(a -> {
            SubAppTypeConfigVO subAppTypeConfigVO = new SubAppTypeConfigVO();
            SysDeptEntity byId = sysDeptService.getById(a.getParentDeptId());
            BeanUtils.copyProperties(a, subAppTypeConfigVO);
            SysDictEntity sysDict = config.getSysDict(SysDictConstant.APP_TYPE_ID, a.getTypeId() + "");
            if (sysDict != null) {
                subAppTypeConfigVO.setTypeName(sysDict.getValue());
            }
            if (byId != null) {
                subAppTypeConfigVO.setParentDeptName(byId.getName());
            }

            return subAppTypeConfigVO;
        }).collect(Collectors.toList());
        PageUtils pageUtils = new PageUtils(page);
        pageUtils.setList(collect);
        return pageUtils;
    }

    @Override
    public PageUtils queryConfirmPage(Map<String, Object> params) {
        params.putIfAbsent("status", Constant.StatusType.NORMAL.getValue());
        return queryPage(params);
    }

}
